#include <iostream>
#include <vector>
using namespace std;

/**
 * @description: 从外向内一圈一圈向矩阵中填写数
 * @param {int} n：控制左、上+1
 * @param {int} m：控制右、下-1。当n==m时，只有1个元素
 * @param {vector<vector<int>>} &mat
 * @param {int} &num：记录填写的数
 */
void Spiral_Matrix(int n, int m, vector<vector<int>> &mat, int &num)
{
    if (n > m)
        return;

    // 赋值最小圈
    if (n == m)
    {
        mat[n][m] = num;
        return;
    }

    // 绕圈赋值当前圈
    int i;
    // 赋值上边
    for (i = n; i <= m; i++)
        mat[n][i] = num++;

    // 赋值右边
    for (i = n + 1; i <= m; i++)
        mat[i][m] = num++;

    // 赋值下边
    for (i = m - 1; i >= n; i--)
        mat[m][i] = num++;

    // 赋值下边
    for (i = m - 1; i >= n + 1; i--)
        mat[i][n] = num++;

    Spiral_Matrix(n + 1, m - 1, mat, num);
}

int main()
{
    int n = 4, num = 1;
    vector<vector<int>> mat(n, vector<int>(n));
    Spiral_Matrix(0, n - 1, mat, num);
    for (auto vec : mat)
    {
        for (int num : vec)
            cout << num << "\t";
        cout << endl;
    }
    return 0;
}